package com.epalmpay.controller.manage.message;

import com.epalmpay.commom.BaseController;
import com.epalmpay.status.Rescode;
import com.epalmpay.dto.messsage.SysMessageInDTO;
import com.epalmpay.dto.messsage.SysMessageListOutDTO;
import com.epalmpay.dto.messsage.SysMessageOutDTO;
import com.epalmpay.dto.messsage.SysMessageQueryDTO;
import com.epalmpay.dto.system.BaseOutDTO;
import com.epalmpay.dto.system.PageDTO;
import com.epalmpay.entity.Page;
import com.epalmpay.entity.SysMessageBase;
import com.epalmpay.service.message.IMessageService;
import com.epalmpay.service.operator.ISysLogService;
import com.epalmpay.util.PropertyCopyUtil;
import com.epalmpay.util.Tools;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


/**
 * Created by lifayi on 2017/5/9.
 */
@RestController
@RequestMapping("/manager/message")
public class SysMessageController extends BaseController {

    @Autowired
    private IMessageService messageService;

	@Resource
    private ISysLogService sysLogService;
    /*
    * 系统消息和站内信列表查询接口
    * */
    @RequestMapping("/listSysMessage")
    public SysMessageListOutDTO listSysMessage(SysMessageQueryDTO sysMessageQueryDTO, PageDTO pageDTO) {
        SysMessageListOutDTO sysMessageListOutDTO = new SysMessageListOutDTO();
        List<SysMessageOutDTO> sysMessageOutDTOList = new ArrayList<SysMessageOutDTO>();

        Page page = Tools.pageEmtity(pageDTO);

        List<SysMessageBase> sysMessageBaseList = null;

        try {
            sysMessageBaseList = messageService.listSysMessage(sysMessageQueryDTO, page);
            for (int i = 0; i < sysMessageBaseList.size(); i++) {
                SysMessageOutDTO sysMessageOutDTO = new SysMessageOutDTO();
                PropertyCopyUtil.copyProperties(sysMessageBaseList.get(i), sysMessageOutDTO);

                Long groupId = sysMessageBaseList.get(i).getSendUserId();
                if(groupId != null && groupId == -1) {
                    sysMessageOutDTO.setMerchantName("全部大商户");
                }
                sysMessageOutDTOList.add(sysMessageOutDTO);
            }
            sysMessageListOutDTO.setSysMessageOutDTOList(sysMessageOutDTOList);
            sysMessageListOutDTO.setPage(page);
            sysMessageListOutDTO.setErrorCode(Rescode.SUCCESS, "处理成功");
        } catch (ParseException e) {

            logger.error("user parameter parse error");
            sysMessageListOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "服务器处理异常");
        } catch (Exception e) {
            sysMessageListOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "服务器处理异常");
            e.printStackTrace();
        }

        return sysMessageListOutDTO;
    }

    /*
    * 系统消息和站内信新增
    * */
    @RequestMapping("/addSysMessage")
    public BaseOutDTO addSysMessage(@RequestBody SysMessageInDTO sysMessageInDTO) {
        BaseOutDTO baseOutDTO = new BaseOutDTO();

        try {
            int i = messageService.addSysMessage(sysMessageInDTO);
            if(i == 1) {
                baseOutDTO.setErrorCode(Rescode.SUCCESS);
                
                String content ="系统消息和站内信新增";
    			sysLogService.addSysLog(sysMessageInDTO.getUserId(),sysMessageInDTO.getUserName(),sysMessageInDTO.getIp(),content,sysMessageInDTO.getGroupId());
                
                return baseOutDTO;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        baseOutDTO.setErrorCode(Rescode.FAIL);
        return baseOutDTO;
    }

    /*
    * 系统消息和站内信删除
    * */
    @RequestMapping("/delSysMessage")
    public BaseOutDTO delSysMessage(@RequestBody SysMessageQueryDTO sysMessageQueryDTO) throws Exception {
        BaseOutDTO baseOutDTO = new BaseOutDTO();
        messageService.delSysMessage(sysMessageQueryDTO);
        baseOutDTO.setErrorCode(Rescode.SUCCESS);
        
        String content ="系统消息和站内信新增";
		sysLogService.addSysLog(sysMessageQueryDTO.getUserId(),sysMessageQueryDTO.getUserName(),null,content,sysMessageQueryDTO.getGroupId());
        return baseOutDTO;
    }

    /*
    * 系统消息和站内信详情（这里的ID是Base表中的ID）
    * */
    @RequestMapping("/sysMessageDetail")
    public SysMessageOutDTO sysMessageDetail(@RequestBody Long id) {
        SysMessageOutDTO sysMessageOutDTO = null;
        try {
            sysMessageOutDTO = messageService.sysMessageDetail(id);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return sysMessageOutDTO;
    }

    /*
    * 系统消息和站内信接收者端详情查看（这里的ID是Info表中的ID）
    * */
    @RequestMapping("/sysMessageMerchantDetail")
    public SysMessageOutDTO sysMessageMerchantDetail(@RequestBody Long id) {
        SysMessageOutDTO sysMessageOutDTO = null;
        try {
            sysMessageOutDTO = messageService.sysMessageMerchantDetail(id);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return sysMessageOutDTO;
    }

    /*
    * 站内信查看接收者
    * */
    @RequestMapping("/viewReceiver")
    public Map<String, List<String>> viewReceiver(@RequestBody Long id) {
        return messageService.viewReceiver(id);
    }
}
